
//构造方法非常特殊：没有返回值，方法名和类名保持一致
//构造方法也是一个特殊的成员方法，名字必须与类名相同，在创建对象时，由编译器自动调用，并且在整个对象的声明周期内只调用一次
//构造方法可以重载

//当我们调用完构造方法，那么对象就生成了
//生成对象的步骤：
//1.为对象分配内存
//2.调用合适的构造方法

//this.date;访问当前对象的成员变量
//this.func();访问当前对象的成员方法
//this();调用当前对象的其他构造方法
//this不能调用静态的成员方法和变量
public class DateUtil {
    //成员变量：定义在方法外部，类的内部的变量
    //局部变量：方法的内部
    //成员变量生命周期：对象创建出生，对象销毁就结束
    //局部变量生命周期：进入方法创建 出方法结束

    public int year;
    public int month;
    public int day;

    //重载：方法名相同，参数列表不同 不加void
    public  DateUtil() {
        this(1999,11,9);//this调用构造方法时，必须构造方法放在第一行，只能在构造方法中使用
        System.out.println("不带参数的构造方法！这个方法没有写，java会默认提供");
        this.show();
    }

    public static void main(String[] args) {
        DateUtil dateUtil = new DateUtil();
        dateUtil.show();
    }
    public  DateUtil(int year,int month,int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public static void main2(String[] args) {
        DateUtil dateUtil = new DateUtil(2022,11,7);
        dateUtil.show();
    }

    //每个成员变量第一个参数 默认是this
    //this引用的是调用成员方法的对象
    //this引用的类型：对应类类型引用，即哪个对象调用就是哪个对象的引用类型
    //习惯使用this
    //this只能在“成员方法”中使用
    //在“成员方法”中，this只能引用当前对象，不能引用其他对象

    //this还有另外两种用法：
    //1.this访问构造方法
    //2.this访问成员方法
    public void setDate(int year,int month,int day) {
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("调用了带有三个参数的构造方法");
    }
    public void show() {

        System.out.println("年： " + this.year + "月：" + this.month + "日： "+ this.day);
    }


    public static void main1(String[] args) {
        DateUtil dateUtil1 = new DateUtil();//这里是实例化对象，此时，会调用对象的构造方法
        dateUtil1.setDate(2022,11,7);
        dateUtil1.show();

        DateUtil dateUtil2 = new DateUtil();
        dateUtil2.setDate(2022,11,7);
        dateUtil2.show();

        DateUtil dateUtil3 = new DateUtil();
        dateUtil3.setDate(2022,11,7);
        dateUtil3.show();
    }
}
